home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 7 / BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso / Files / Prog / T / TC Prog Guide.cpt / picture ƒ / segment.c < prev    next >
Text File  |  1991-02-16  |  3KB  |  118 lines

  1. /*
  2. *    FILE:        segment.c
  3. *    AUTHOR:        R. Gonzalez
  4. *    CREATED:    October 2, 1990
  5. *
  6. *    defines methods for abstract segment classes, from which
  7. *    all graphics figures descend
  8. */
  9.  
  10. # include    "segment.h"
  11.  
  12. /******************************************************************
  13. *    generic set-color.  derived classes should override!
  14. ******************************************************************/
  15. void    Segment::set_color(color segment_color)
  16. {
  17. }
  18.  
  19. /******************************************************************
  20. *    generic draw.  derived classes should override!
  21. ******************************************************************/
  22. void    Segment::draw(Camera* camera,Projector* projector,
  23.                     Transformation* trans)
  24. {
  25. }
  26.  
  27. /******************************************************************
  28. *    generic move.  derived classes should override!
  29. ******************************************************************/
  30. void    Segment::move(Transformation* trans)
  31. {
  32. }
  33.  
  34. /******************************************************************
  35. *    initialize abstract nested segment.  Derived class should
  36. *    override this and first call inherited method before init-
  37. *    ializing segments and num_segments appropriately.  Make sure
  38. *    num_segments <= MAX_SEGMENTS.  If you don't call the inherited
  39. *    method be sure to allocate transformation in the derived method.
  40. ******************************************************************/
  41. boolean    Nested_Segment::init(void)
  42. {
  43.     transformation = new(Transformation);
  44.     transformation->init();
  45.     
  46.     num_segments = 0;
  47.     
  48.     return TRUE;
  49. }
  50.  
  51. /******************************************************************
  52. *    Set nested segment color.  No need to override.
  53. ******************************************************************/
  54. void    Nested_Segment::set_color(color segment_color)
  55. {
  56.     int                i;
  57.     
  58.     for (i=0 ; i<num_segments ; i++)
  59.         segment[i]->set_color(segment_color);
  60. }
  61.  
  62. /******************************************************************
  63. *    Nested segment draw method.  No need to override.
  64. ******************************************************************/
  65. void    Nested_Segment::draw(Camera* camera,Projector* projector,
  66.                             Transformation* received_trans)
  67. {
  68.     int                i;
  69.     Transformation    *sent_trans;
  70.     
  71.     sent_trans = new(Transformation);
  72.     sent_trans->init();
  73.     
  74.     sent_trans->combine(transformation,received_trans);
  75.     
  76.     for (i=0 ; i<num_segments ; i++)
  77.         segment[i]->draw(camera,projector,sent_trans);
  78.     
  79.     sent_trans->destroy();
  80.     delete(sent_trans);
  81. }
  82.  
  83. /******************************************************************
  84. *    Nested segments move by altering their transformation.
  85. *    No need to override.
  86. ******************************************************************/
  87. void    Nested_Segment::move(Transformation* trans)
  88. {
  89.     Transformation    *temp;
  90.     
  91.     temp = new(Transformation);
  92.     temp->init();
  93.     temp->equate(transformation);
  94.     transformation->combine(temp,trans);
  95.     temp->destroy();
  96.     delete(temp);
  97. }
  98.  
  99. /******************************************************************
  100. *    destroy.  No need to override.
  101. ******************************************************************/
  102. boolean    Nested_Segment::destroy(void)
  103. {
  104.     int        i;
  105.     
  106.     transformation->destroy();
  107.     delete(transformation);
  108.     
  109.     for (i=0 ; i<num_segments ; i++)
  110.     {
  111.         segment[i]->destroy();
  112.         delete(segment[i]);
  113.     }
  114.     
  115.     return TRUE;
  116. }
  117.  
  118.